package assert

import (
	"gitee.com/ktark/ktark-framework/ktark-core/function"
	"regexp"
)

/**
断言
*/

// numberReg 数字正则表达式
var numberReg = regexp.MustCompile(`^\d+$`)

// IsNumberChar 判断字符是否为number
func IsNumberChar(c byte) bool { return c >= '0' && c <= '9' }

// IsNumberString 判断字符串是否是数字
func IsNumberString(s string) bool { return numberReg.MatchString(s) }

// NotNil 断言 @Param{object} 不是nil
//
//	Parameters
//		object 对象
//		message 断言消息
//	Errors
//	 	panic 异常panic
func NotNil(object interface{}, message string) {
	if object == nil {
		panic(message)
	}
}

// State 状态判断。当为false是，则抛出Panic
//
//	Parameters
//		expression 判断值
//		supplier panic消息
//	Errors
//	 	panic 异常panic
func State(expression bool, supplier function.Supplier[string]) {
	if !expression {
		panic(nilSafeGet(supplier))
	}
}

// nilSafeGet nil的安全获取
func nilSafeGet(supplier function.Supplier[string]) string {
	if supplier == nil {
		return ""
	}
	return supplier()
}
